package com.example.cardgame

import android.annotation.SuppressLint
import android.os.Bundle
import android.view.View
import android.widget.Button
import android.widget.TextView
import androidx.activity.ComponentActivity
import androidx.activity.enableEdgeToEdge
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.toArgb
import androidx.compose.ui.tooling.preview.Preview
import androidx.core.view.children
import androidx.gridlayout.widget.GridLayout
import com.example.cardgame.model.CardMatchingGame
import com.example.cardgame.ui.theme.CardGameTheme

// 定义 MainActivity 类，继承 ComponentActivity 并实现 View.OnClickListener 接口
class CardGame : ComponentActivity(), View.OnClickListener {

    // 定义游戏实例
    private lateinit var game: CardMatchingGame // lateinit 延迟初始化
    // 定义卡片按钮列表
    private var cardButtons = mutableListOf<Button>()

    // 重写 onCreate 方法，初始化活动
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge() // 启用边缘到边缘显示
        setContentView(R.layout.activity_cardgame) // 设置内容视图

        // 获取 GridLayout 和重置按钮
        val gridlayout: GridLayout = findViewById(R.id.gridlayout)
        val reset = findViewById<Button>(R.id.reset)
        val exitGame = findViewById<Button>(R.id.exitgame)
        // 遍历 GridLayout 中的所有子视图
        for (v in gridlayout.children) {
            if (v is Button) {
                v.setOnClickListener(this) // 设置按钮点击监听器
                cardButtons.add(v) // 将按钮添加到卡片按钮列表
            }
        }
        // 初始化游戏实例
        game = CardMatchingGame(cardButtons.count())
        updateUI() // 更新 UI

        // 设置重置按钮的点击监听器
        reset.setOnClickListener {
            game = CardMatchingGame(cardButtons.count())
            updateUI()
        }

        //退出游戏
        exitGame.setOnClickListener {
            //将当前score与home中传过来的最高分以及上一次记录的最高分比较，如果大于最高分则更新最高分
            val intent = getIntent()
            val bestScore = intent.getIntExtra(BEST_SCORE, 0)
            if (game.score > bestScore) {//如果当前分数大于最高分
                intent.putExtra(BEST_SCORE, game.score)
                setResult(RESULT_OK, intent)
            }
            finish()
        }


    }

    // 更新 UI 方法
    @SuppressLint("DefaultLocale")
    fun updateUI() {
        // 遍历所有按钮
        for (button in cardButtons) {
            val index = cardButtons.indexOf(button)
            val card = game.cardAtIndex(index) // 获取对应索引的卡片
            button.isEnabled = !card.isMatched // 如果卡片已匹配，按钮不可用
            if (card.isChosen) { // 如果卡片已选择
                button.text = card.toString() // 显示卡片的花色和牌面值
                button.setBackgroundColor(Color.White.toArgb()) // 设置背景颜色为白色
            } else {
                button.text = "" // 不显示卡片的花色和牌面值
                button.setBackgroundResource(R.drawable.cardcover) // 设置背景为卡片背面
            }
        }
        // 显示得分
        val score = findViewById<TextView>(R.id.score)
        score.text = String.format("%s%d",getString(R.string.score), game.score)
    }

    // 重写 onClick 方法，处理按钮点击事件
    override fun onClick(v: View?) {
        if (v is Button) {
            val index = cardButtons.indexOf(v)
            game.chooseCardAtIndex(index) // 选择卡片
            updateUI() // 更新 UI
        }
    }
}

// 定义 Greeting 组合函数
@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
    Text(
        text = "Hello $name!",
        modifier = modifier
    )
}

// 定义 GreetingPreview 预览函数
@Preview(showBackground = true)
@Composable
fun GreetingPreview() {
    CardGameTheme {
        Greeting("Android")
    }
}